今天的学习笔记是学习关于王运来老师分享的《MiniOB - 帮你从底层深入了解数据库实现》。
MiniOB 简介
首先 运来老师介绍了 MiniOB 的来历。由于数据库是软件行业的三驾马车之一,非常重要,但是很多相关从业人员,受限于数据库内核超级广的知识体系,并不了解数据库的底层实现原理,所以上手并不容易。另外国内数据库起步比较晚,教育、科研人才积累的比较少。
基于这些背景,OceanBase 社区希望通过 MiniOB 及其对应的系列课程,学习到很多数据库底层的原理。
当前 MiniOB 设计的比较简单,功能结构也比较清晰,可以通过下面的架构图形成一个整体的认识。下面我们跟着运来老师的思路,了解一下各个模块:
- Client 向灰色框框里的服务端发起访问请求;
- NET 网络模块接受到请求以后,将请求交给 Parser 模块进行词法解析(LEX)和语法解析(YACC);
- 经过词法解析和语法解析后,转发给 Plan Cache 这个模块,当前的 Plan Cache 不做任何特殊处理,直接丢给 Resolver 模块;
- Resolver 模块会将 Parser 模块解析出来的语法树进行细化,比如把里面表的名字转换成某一个对象、比如把 SELECT * 中的 * 转换为表中的各个字段;当然在这个阶段还会进行一些预检,比如查看该表是否存在;
- 接下来会传给优化阶段的 Transformer 和 Optimizer